<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <script>
        function* helloWorldGenerator() {
            yield 'hello';
            yield 'world';
            return 'ending';
        };
        //【1】不同的是，调用 Generator 函数后，该函数并不执行，返回的也不是函数运行结果，而是一个指向内部状态的指针对象，也就是上一章介绍的遍历器对象（Iterator Object）。
        var hw = helloWorldGenerator();
        console.log(hw);
        console.log(hw.next()); // { value: 'hello', done: false }
        console.log(hw.next()); // { value: 'world', done: false }
        console.log(hw.next()); // { value: 'ending', done: true }
        console.log(hw.next()); // { value: undefined, done: true }


        //【2】需要注意的是，yield表达式后面的表达式，只有当调用next方法、内部指针指向该语句时才会执行，因此等于为 JavaScript 提供了手动的“惰性求值”（Lazy Evaluation）的语法功能。
    </script>
</body>

</html>